package com.cqu.hospitalsystem.service.impl;

import com.cqu.hospitalsystem.Vo.CheckResult;
import com.cqu.hospitalsystem.dao.ChecklistDao;
import com.cqu.hospitalsystem.entity.Checklist;
import com.cqu.hospitalsystem.entity.ItemListRelation;
import com.cqu.hospitalsystem.dao.ItemListRelationDao;
import com.cqu.hospitalsystem.service.ItemListRelationService;
import com.cqu.hospitalsystem.utils.result.DataResult;
import org.springframework.stereotype.Service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import javax.annotation.Resource;

@Service("itemListRelationService")
public class ItemListRelationServiceImpl implements ItemListRelationService {
    @Resource
    private ItemListRelationDao itemListRelationDao;
    @Resource
    private ChecklistDao checklistDao;

    /**
     * 通过ID查询单条数据
     *
     * @param itemListId 主键
     * @return 实例对象
     */
    @Override
    public ItemListRelation queryById(Long itemListId) {
        return this.itemListRelationDao.queryById(itemListId);
    }

    /**
     * 分页查询
     *
     * @param itemListRelation 筛选条件
     * @param pageRequest      分页对象
     * @return 查询结果
     */
    @Override
    public Page<ItemListRelation> queryByPage(ItemListRelation itemListRelation, PageRequest pageRequest) {
        long total = this.itemListRelationDao.count(itemListRelation);
        return new PageImpl<>(this.itemListRelationDao.queryAllByLimit(itemListRelation, pageRequest), pageRequest, total);
    }

    /**
     * 新增数据
     *
     * @param itemListRelation 实例对象
     * @return 实例对象
     */
    @Override
    public ItemListRelation insert(ItemListRelation itemListRelation) {
        this.itemListRelationDao.insert(itemListRelation);
        return itemListRelation;
    }

    /**
     * 修改数据
     *
     * @param itemListRelation 实例对象
     * @return 实例对象
     */
    @Override
    public ItemListRelation update(ItemListRelation itemListRelation) {
        this.itemListRelationDao.update(itemListRelation);
        return this.queryById(itemListRelation.getItemListId());
    }

    /**
     * 通过主键删除数据
     *
     * @param itemListId 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Long itemListId) {
        return this.itemListRelationDao.deleteById(itemListId) > 0;
    }

    @Override
    public DataResult setCheckResult(CheckResult checkResult){
        String Url = "D:\\0\\winterProject\\file\\img\\";
        String imgAddr = "null.png";
        if(checkResult.getResultImg().isEmpty()){
            return DataResult.err();
        } else {
            try {
                // 获取原始文件名
                String originalFilename = checkResult.getResultImg().getOriginalFilename();
                // 生成随机文件名
                String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
                imgAddr = UUID.randomUUID().toString() + extension;
                // 指定上传路径
                Path destinationPath = Paths.get(Url + imgAddr);
                // 确保上传路径存在
                Files.createDirectories(destinationPath.getParent());
                // 保存文件
                Files.copy(checkResult.getResultImg().getInputStream(), destinationPath);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if(this.itemListRelationDao.setResult(checkResult.getItemListId(), checkResult.getResultText(), imgAddr, new Date())) {
            ItemListRelation itemListRelation = this.itemListRelationDao.queryById(checkResult.getItemListId());
            List<ItemListRelation> itemListRelations = this.itemListRelationDao.queryListByCheckListId(itemListRelation.getChecklistId());
            boolean flag = false;
            for(int i=0;i<itemListRelations.size();i++) {
                if(itemListRelations.get(i).getState()!=2) flag =true;
            }
            if(!flag){
                Checklist checklist = new Checklist();
                checklist.setChecklistId(itemListRelation.getChecklistId());
                checklist.setChecklistStatus(2);
                this.checklistDao.update(checklist);
            }
            return DataResult.succ();
        }
        else return DataResult.err();
    }

    @Override
    public DataResult getCheckResult(Long itemListRelationId) {
        return DataResult.successByData(this.itemListRelationDao.queryResultForDoc(itemListRelationId));
    }
}
